#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     : 2024/8/13 18:53
# @Author   : MingTai
# @File     : string_handle.py
# 字符串相关的处理算法在这里写


def strip_string_train(str_strip):
    """
        strip()的用法： 在 Python 中，strip() 是字符串对象的一个方法，用于移除字符串【首尾两端】的指定字符（默认移除空白字符）。
                        strip() 只处理字符串的开头和结尾，中间的字符不会被处理。
    """
    # 1 默认移除空白字符
    s = "  hello world  \n"
    print(s.strip())  # 输出："hello world"（首尾空格和换行符被移除）

    # 指定移除的字符：
    s = "###hello###"
    print(s.strip("#"))  # 输出："hello"（首尾的#被移除）

    # 移除多个指定字符：
    s = "123hello321"
    print(s.strip("123"))  # 输出："hello"（首尾的1、2、3被移除，无论顺序）

    # 只移除首尾，不影响中间：
    s = "  a b c  "
    print(s.strip())  # 输出："a b c"（中间的空格保留）

    # 其他的用法
    "Hello".lower()  # 输出: "hello"  # lower()：将字符串全部转为小写
    "Hello".upper()  # 输出: "HELLO"  # upper()：将字符串全部转为大写
    "hello world".capitalize()  # 输出: "Hello world"   capitalize()：首字母大写，其余小写
    "hello world".title()  # 输出: "Hello World"   title()：每个单词首字母大写
    "Hello World".swapcase()  # 输出: "hELLO wORLD"     swapcase()：大小写互换


def split_string_train(str_split):
    """
        split() 是字符串方法，用于[将字符串按指定分隔符分割成多个子串]，返回一个包含这些子串的[列表]
        语法：str.split(sep=None, maxsplit=-1)
            sep：可选参数，指定分隔符（如 ","、空格等）。默认值为 None，表示按任意个空白字符（空格、换行、制表符等）分割。
            maxsplit：可选参数，指定最大分割次数（默认 -1 表示分割所有可能的位置）
    :param str_split:
    :return:
    """
    s = "apple,banana,orange"

    # 按逗号分割
    print(s.split(","))  # 输出：['apple', 'banana', 'orange']

    # 限制分割次数（只分割1次）
    print(s.split(",", 1))  # 输出：['apple', 'banana,orange']

    # 按空白字符分割（默认行为）
    s2 = "hello   world\tpython\n"
    print(s2.split())  # 输出：['hello', 'world', 'python']（自动忽略多个空白）


def join_string_train(str_join):
    """
        join() 是字符串方法，用于将一个 可迭代对象（如列表、元组）中的元素用指定字符串连接起来，返回拼接后的新字符串。
        语法：str.join(iterable)
            str：作为连接符的字符串（如 "-"、"," 等）。
            iterable：要连接的可迭代对象，其元素必须是字符串（否则会报错）。
    :param str_join:
    :return:
    """
    # 用逗号连接列表元素
    fruits = ["apple", "banana", "orange"]
    print(",".join(fruits))  # 输出："apple,banana,orange"

    # 用空格连接元组元素
    words = ("hello", "world")
    print(" ".join(words))  # 输出："hello world"

    # 用空字符串连接（相当于拼接）
    print("".join(["a", "b", "c"]))  # 输出："abc"


def slice_string_train(str_split):
    """
    切片是 Python 中对序列类型（字符串、列表、元组等）的通用操作，用于从序列中截取部分元素，返回一个新的序列（不修改原序列）。
    语法：sequence[start:end:step]  参数含义：开始索引(默认0)、结束索引(默认最后)、步长(-1表示反向)
    :param str_split:
    :return:
    """
    s = "abcdefgh"

    # 截取从索引2到5（不包含5）的元素
    print(s[2:5])  # 输出："cde"（对应索引2、3、4）

    # 省略start（从开头截取到end）
    print(s[:4])  # 输出："abcd"（索引0到3）

    # 省略end（从start截取到结尾）
    print(s[4:])  # 输出："efgh"（索引4到7）

    # 指定步长（每隔1个取1个）
    print(s[::2])  # 输出："aceg"（索引0、2、4、6）

    # 反向截取（步长为负数）
    print(s[::-1])  # 输出："hgfedcba"（反转字符串）

    # 反向截取部分元素
    print(s[5:1:-1])  # 输出："fedc"（从索引5到2，反向取）


# LCR 181. 字符串中的单词反转 https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/description/
def reverse_message(message):
    message = "the sky is blue"  # 返回 blue is sky the
    """
           :type message: str
           :rtype: str
    """
    # 先去除前后空格或者/，然后分割单词为列表，接着把单词列表进行倒序，最后通过空格链接每个单词
    message = message.strip()
    message = message.split()
    message = message[::-1]
    return ' '.join(message)


"""
给定一个字符串 s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。

示例 1：

输入：s = "Let's  Let's take LeetCode contest"
输出："s'teL ekat edoCteeL tsetnoc"
示例 2:

输入： s = "Mr Ding"
输出："rM gniD"

"""


def tra_num(s: str):
    s1 = s.split(' ')
    s_new = ''
    for i in s1:
        # print()
        aa = i[::-1]
        s_new = s_new + aa + ' '

        # print(s_new)
    print(s_new)


"""
        在 Python 中，replace() 是字符串对象的内置方法，用于将字符串中的指定子串替换为新的子串，并返回替换后的新字符串（原字符串不会被修改，因为字符串是不可变类型）。
        str.replace(old, new, count)
        
        s = "abracadabra"
        new_s = s.replace("a", "x")
        print(new_s)  # 输出："xbrxcxdxbrx"（所有"a"都被替换为"x"）
"""


def slicing_array(s: str):
    print(s[-1:])


if __name__ == '__main__':
    # slicing_array(s="Let's Let's take LeetCode contest")
    print(reverse_message('the sky is blue'))
